<?php

require_once dirname(__FILE__) . '/' . 'igetui/template/notify/IGt.Notify.php';
require_once dirname(__FILE__) . '/' . 'igetui/IGt.APNPayload.php';
require_once dirname(__FILE__) . '/' . 'config.php';
require_once dirname(__FILE__) . '/' . 'IGt.Push.php';

// 创建推送对象

// 创建支持厂商通道的透传消息
function createPushMessage($p, $i, $t, $c)
{
    $template = new IGtTransmissionTemplate();
    $template->set_appId(APPID); //应用appid
    $template->set_appkey(APPKEY); //应用appkey
    $template->set_transmissionType(2); //透传消息类型:1为激活客户端启动

    //为了保证应用切换到后台时接收到个推在线推送消息，转换为{title:'',content:'',payload:''}格式数据，UniPush将在系统通知栏显示
    //如果开发者不希望由UniPush处理，则不需要转换为上述格式数据（将触发receive事件，由应用业务逻辑处理）
    //注意：iOS在线时转换为此格式也触发receive事件
    $payload             = array('title' => $t, 'content' => $c);
    $pj                  = json_decode($p, true);
    $payload['payloads'] = is_array($pj) ? $pj : $p;
    $template->set_transmissionContent(json_encode($payload)); //透传内容

    //兼容使用厂商通道传输
    $notify = new IGtNotify();
    $notify->set_title($t);
    $notify->set_content($c);
    $notify->set_intent($i);
    $notify->set_type(NotifyInfo_type::_intent);
    $template->set3rdNotifyInfo($notify);

    //iOS平台设置APN信息，如果应用离线（不在前台运行）则通过APNS下发推送消息
    $apn                 = new IGtAPNPayload();
    $apn->alertMsg       = new DictionaryAlertMsg();
    $apn->alertMsg->body = $c;
    $apn->add_customMsg('payload', is_array($pj) ? json_encode($pj) : $p); //payload兼容json格式字符串
    $template->set_apnInfo($apn);
    return $template;
}

/**
 * 单推接口示例
 * @param $template: 推送的消息模板
 * @param $cid: 推送的客户端标识
 */
function pushMessageToSingle($template, $cid)
{
    $igt = new IGeTui(HOST, APPKEY, MASTERSECRET);

    //个推信息体
    $message = new IGtSingleMessage();
    $message->set_isOffline(true); //是否离线
    $message->set_offlineExpireTime(3600 * 12 * 1000); //离线时间
    $message->set_data($template); //设置推送消息类型
    $message->set_PushNetWorkType(0); //设置是否根据WIFI推送消息，1为wifi推送，0为不限制推送
    //接收方
    $target = new IGtTarget();
    $target->set_appId(APPID);
    $target->set_clientId($cid);
    try {
        return $igt->pushMessageToSingle($message, $target);
    } catch (RequestException $e) {
        $requstId = e . getRequestId();
        return $igt->pushMessageToSingle($message, $target, $requstId);
    }
}

/**
 * APP接口示例
 * @param $template: 推送的消息模板
 * @param $cids: 推送的客户端标识
 */
function pushMessageToList($template, $cids)
{
    $igt = new IGeTui(HOST, APPKEY, MASTERSECRET);
    //个推信息体
    $message = new IGtListMessage();
    $message->set_isOffline(true); //是否离线
    $message->set_offlineExpireTime(3600 * 12 * 1000); //离线时间
    $message->set_data($template); //设置推送消息类型
    $message->set_PushNetWorkType(0); //设置是否根据WIFI推送消息，1为wifi推送，0为不限制推送
    $contentId = $igt->getContentId($message);
    $targets   = [];
    foreach ($cids as $cid) {
        $target = new IGtTarget();
        $target->set_appId(APPID);
        $target->set_clientId($cid);
        array_push($targets, $target);
    }
    try {
        return $igt->pushMessageToList($contentId, $targets);
    } catch (RequestException $e) {
        return ["state" => "error", "msg" => "推送失败", "tip" => $e];
    }
}

/**
 * APP接口示例
 * @param $template: 推送的消息模板
 * @param $cids: 推送的客户端标识
 */
function pushMessageToApp($template)
{
    $igt = new IGeTui(HOST, APPKEY, MASTERSECRET);
    //个推信息体
    $message = new IGtAppMessage();
    $message->set_isOffline(true); //是否离线
    $message->set_offlineExpireTime(3600 * 12 * 1000); //离线时间
    $message->set_data($template); //设置推送消息类型
    $message->set_appIdList([APPID]); //设置推送消息类型
    $message->set_PushNetWorkType(0); //设置是否根据WIFI推送消息，1为wifi推送，0为不限制推送
    try {
        return $igt->pushMessageToApp($message);
    } catch (RequestException $e) {
        return ["state" => "error", "msg" => "推送失败", "tip" => $e];
    }
}
